﻿using System;
using System.Linq;
using System.Web;
using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions;

namespace Universitario.DAO
{
    public class UsuarioDAO
    {
        private static DataClasses1DataContext dc = new DataClasses1DataContext();
        public static ArrayList erros
        {
            get;
            set;
        }

        /// <exception cref="ArgumentException">A exception é lançada quando algum campo do Usuário é inválido.</exception>
        public static void Insert(Usuario usuario){

            /*if (isValido(usuario))
            {
                throw new ArgumentException();
            }*/

            try
            {
                dc.Usuarios.InsertOnSubmit(usuario);
                dc.SubmitChanges();
            }
            catch (System.Data.SqlClient.SqlException ex)
            {
                throw ex;
            }
            catch (ArgumentNullException)
            {
                throw new System.ArgumentNullException("Erro");
            }
        }
        public static Boolean isValido( Usuario usuario )
        {
            erros = new ArrayList();
            // Regex simples para validar cpf.
            Regex cpf = new Regex("\\d\\d\\d.\\d\\d\\d.\\d\\d\\d-\\d\\d");

            // Nome preenchido
            if ( usuario.nome.Length < 3 )
            {
                erros.Add(new KeyValuePair<String, String>("TxtNome", "Seu Nome precisa ter no mínimo 3 letras."));
            }

            // Sobrenome preenchido
            if ( usuario.sobrenome.Length < 3 )
            {
                erros.Add(new KeyValuePair<String, String>("TxtSobrenome", "Seu Sobrenome precisa ter no mínimo 3 letras."));
            }

            // Data de nascimento valida, se no POST vier vazia, preencher com 00/00/0000
            if (usuario.data_nascimento == DateTime.MinValue)
            {
                erros.Add(new KeyValuePair<String, String>("TxtDataNasc", "Data de nascimento precisa ser preenchida."));
            }

            // CPF "valido"
            if ( ! cpf.IsMatch( usuario.cpf, 0 ) )
            {
                erros.Add(new KeyValuePair<String, String>("TxtCpf", "Digite um CPF válido."));
            }

            // Se ja existe algum usuario com esse cpf...
            if (SelectByCPF(usuario.cpf) != null)
            {
                erros.Add(new KeyValuePair<String, String>("TxtCpf", "CPF já está sendo usado."));
            }

            // Senha com mais de 5 caracteres
            if ( usuario.senha.Length < 5 )
            {
                erros.Add(new KeyValuePair<String, String>("TxtPass", "Sua Senha precisa ter no mínimo 5 caracteres."));
            }

            return erros.Count == 0;
        }

        public static Usuario SelectByID(long id)
        {
            var query = from usuario in dc.Usuarios
                        where usuario.id == id
                        select usuario;
            return query.FirstOrDefault();
        }
        public static Usuario SelectByNome(String nome)
        {
            var query = from usuario in dc.Usuarios
                        where usuario.nome == nome
                        select usuario;
            return query.FirstOrDefault();
        }
        public static Usuario SelectByCPF(String cpf)
        {
            var query = from usuario in dc.Usuarios
                        where usuario.cpf == cpf
                        select usuario;
            return query.FirstOrDefault();
        }
        public static Usuario Login(String CPF, String senha)
        {
            try
            {
                var query = from usuario in dc.Usuarios
                            where usuario.cpf == CPF && usuario.senha == senha
                            select usuario;
                return query.FirstOrDefault();
            }
            catch (NullReferenceException)
            {
                throw new System.NullReferenceException();
            }
        }


    }
}      